Most commercial integrated circuits ("chips") have predetermined logic functions which are established by the manufacturer. Programmable logic semiconductor device chips (hereinafter "programmable chips") are a class of integrated circuits that can be modified by an end user to achieve synthesis of arbitrary logic that is selected by one user. Anti-fuse devices have proven to be useful for interconnecting elements of such programmable chips.
An anti-fuse device is a circuit element which is normally non-conducting. It becomes a low impedance conductor when its state is changed by a programming action. A programming action is defined as the application of a voltage above a predetermined threshold level to an anti-fuse device. Anti-fuse devices are used to establish the interconnecting paths for signals between standardized functional logic blocks or other elements of the programmable chip.
User-programmable array logic circuits using anti-fuse devices to implement arbitrary logic functions are known. One prior art method, disclosed in U.S. Pat. No. 4,758,745, uses shunting transistors to provide a voltage across the terminals of an anti-fuse device to program the device. More specifically, a string of anti-fuse devices is constructed with one shunting transistor in parallel with each anti-fuse device such that the transistors form a series string parallel to the anti-fuse string. To program an anti-fuse device, the series of shunting transistors on each side of the anti-fuse device to be programmed are made conductive. Signal buses oriented perpendicular to the string of anti-fuse devices are used to make the selected strings of shunting transistors conductive. Transistors may then be made conductive in desired patterns to program selected anti-fuse devices by controlling the signals on the signal buses. In addition, these shunting transistors can be used to observe or to inject voltages at a desired node in the programmable/programmed array logic circuit.
One problem with this technique is the shunting transistors have a considerable series resistance. Consequently, the series impedance of the series string of shunting transistors limits the amount of power that can forced into an anti-fuse device to program the anti-fuse device. Thus, in some circumstances the voltage drop across an anti-fuse device may not be sufficient to program some types of anti-fuse devices. This technique requires one programming transistor for every anti-fuse device in the system.
Another method for programming an array of anti-fuse devices, disclosed in U.S. Pat. No. 4,873,459, uses a row of transistors placed in parallel with the anti-fuse devices. This system enables programming a desired anti-fuse device using only two transistors in series with the anti-fuse device. These transistors are controlled by a signal bus that is parallel to the string of anti-fuse devices in which the anti-fuse device to be programmed is located. One disadvantage of this scheme is the requirement that an intermediate voltage be experienced by anti-fuse devices not meant to be programmed including the anti-fuse devices adjacent the anti-fuse device to be programmed. It is required that the intermediate voltage be insufficient to program spuriously a programmable element which may not be realizable with some types of anti-fuse devices. Another disadvantage of this scheme is that in order to observe voltages or to inject a voltage at a desired node, a second set of transistors is required. It is the second set of transistors, and not the programming transistors, which form the addressable virtual probe for observing internal test points to analyze the circuit connections of the programmable chip. Thus, this implementation limits the type of anti-fuse devices that can be used, and requires two programming transistors for every anti-fuse device.
There is thus a continuing need for improved circuits for programming anti-fuse devices that do not present large impedances, that improve selective application of programming devices, and that provide an addressable virtual probe without increasing the part count of the device.